Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Стандартные строковые функции, совместимые с массивами (Юрий Насретдинов)
Author Message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Feb 15, 2004 5:18 pm ()
   Post subject: Стандартные строковые функции, совместимые с массивами
Reply with quote

САБЖ. Были взяты функции stripslashes, addslashes, str_replace, preg_replace и preg_replace_callback и для них я сделал функции-аналоги, но последним аргументом они принимают массив, причем любой вложенности (в т.ч. и многомерные массивы), вместо строки:
Code (php): скопировать код в буфер обмена
/**
 * @return array
 * @param array $ar
 * @desc Strip_slashes compactible with arrays
*/

function astripslashes($ar)
{
        foreach($ar as $key=>$value) $ar[$key]=is_array (www.php.net/is_array)($value) ? astripslashes($value) : stripslashes (www.php.net/stripslashes)($value);
        return $ar;
}
//**
/**
 * @return array
 * @param mixed $p1
 * @param mixed $p2
 * @param array $ar
 * @desc Str_replace compactible with arrays
*/

function astr_replace($p1,$p2,$ar)
{
        foreach($ar as $key=>$value) $ar[$key]=is_array (www.php.net/is_array)($value) ? astr_replace($p1,$p2,$value) : str_replace (www.php.net/str_replace)($p1,$p2,$value);
        return $ar;
}
//**
/**
 * @return array
 * @param mixed $p1
 * @param mixed $p2
 * @param array $ar
 * @desc Preg_replace compactible with arrays
*/

function apreg_replace($p1,$p2,$ar)
{
        foreach($ar as $key=>$value) $ar[$key]=is_array (www.php.net/is_array)($value) ? apreg_replace($p1,$p2,$value) : preg_replace (www.php.net/preg_replace)($p1,$p2,$value);
        return $ar;
}
//**
/**
 * @return array
 * @param string $p1
 * @param string $p2
 * @param array $ar
 * @desc Preg_replace_callback compactible with arrays
*/

function apreg_replace_callback($p1,$p2,$ar)
{
        foreach($ar as $key=>$value) $ar[$key]=is_array (www.php.net/is_array)($value) ? apreg_replace_callback($p1,$p2,$value) : preg_replace_callback (www.php.net/preg_replace_callback)($p1,$p2,$value);
        return $ar;
}
//**
/**
 * @return array
 * @param array $ar
 * @desc Add_slashes compactible with arrays
*/

function aaddslashes($ar)
{
        foreach($ar as $key=>$value) $ar[$key]=is_array (www.php.net/is_array)($value) ? aaddslashes($value) : addslashes (www.php.net/addslashes)($value);
        return $ar;
}
На практике функции оказались очень удобны ;).

P.S. Заметьте, что функция preg_replace_callback не принимает первые 2 аргумента массивы - это довольно подробно обьяснено в документации: www.php.net/preg_replace_callback
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Mon Feb 16, 2004 2:30 am (спустя 9 часов 12 минут)
   Post subject:
Reply with quote

Подход к рекурсии у тебя, я считаю, неправильный. Что, если функцию вызовут для строки, а не для массива? Лучше ее так переписать:
Code (php): скопировать код в буфер обмена
function astripslashes($ar)
{
    if (!is_array (www.php.net/is_array)($ar)) return stripslashes (www.php.net/stripslashes)($ar);
    foreach($ar as $key=>$value) $ar[$key]=astripslashes($value);
    return $ar;
}
тогда результат будет тот же, зато функция универсальнее.

Кроме того, замечу, что str_replace и preg_replace и так могут принимать на вход массив элементов.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat Feb 28, 2004 7:26 pm (спустя 12 дней 16 часов 55 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
и так могут принимать на вход массив элементов.
В том-то и прикол, что они н понимают многомерные массивы...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sat Feb 28, 2004 7:57 pm (спустя 30 минут)
   Post subject:
Reply with quote

А, ну это да.
Есть еще функции вроде array_walk(), кстати. Вроде бы даже есть и их рекурсивные варианты.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat Feb 28, 2004 10:34 pm (спустя 2 часа 37 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Есть еще функции вроде array_walk(), кстати
Честно говоря, никогда не мог понять, что же все-таки эта функция делает, и как она работает :), поэтому никогда её не пользовался... Мне эта функция кажется какой-то "шаманской", чтоли ;).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Tue Mar 02, 2004 4:33 am (спустя 2 дня 5 часов 59 минут)
   Post subject:
Reply with quote

Ну вот, в общем-то, по-русски описание:
ru3.php.net/manual/ru/function.array-map.php

Но с рекурсией у нее, конечно, вообще никак.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML